package com.atguigu.activemq_learn.spring;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.JmsException;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

import javax.jms.TextMessage;

/**
 * 整合spring，队列消息生产者
 */
@Service
public class SpringMQ_Queue_Produce {
    @Autowired
    private JmsTemplate jmsTemplate;

    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 作为演示，简约点，不写controller，直接在service模拟生成 SpringMQ_Produce 的实例。
        // 相当于 SpringMQ_Produce p = new SpringMQ_Produce();
        SpringMQ_Queue_Produce produce = (SpringMQ_Queue_Produce) applicationContext.getBean("springMQ_Queue_Produce");
        // 队列已经在配置文件中配置到了JmsTemplate ,所以无需指定目的地，直接发送消息即可。 produce.jmsTemplate.send(MessageCreator var1) throws JmsException;
        // 匿名内部类方式
//        produce.jmsTemplate.send(new MessageCreator() {
//            @Override
//            public Message createMessage(Session session) throws JMSException {
//                TextMessage textMessage = session.createTextMessage("---这是spring整合MQ队列的消息---");
//                return textMessage;
//            }
//        });
        // lamda表达式
        // 转化过程
        // 1 方法参数提出来放在最前面，如果是单个参数，可以去除类型
        // 2 直接将实现的方法中的代码提取出来作为实际逻辑
        produce.jmsTemplate.send((session) -> {
            TextMessage textMessage = session.createTextMessage("我是spring发送的队列消息");
            return textMessage;
        });
        System.out.println("生产者发送消息完成");
    }

}
